この項では、データ・ストアに作成済の表がアプリケーションで見つからないときに確認する事項を説明します。
考えられる原因
|
対処
|
---|---|
所有者を指定していないか、間違って指定している | |
TimesTenデータ・ストアのアクセス制御が有効になっているが、表に対するSELECTアクセス権がユーザーにない | |
データ・ストアが一時的である | |
Overwrite属性が有効になっている | |
DSNに指定したパス名が相対的である | |
データ・ストア領域が不足している |
表と索引は、「PARTS」
のような単独の名前、または「STAN.PARTS」
のような所有者と表名が組み合された修飾名で作成できます。表または索引にアクセスする際に所有者を指定しないと、TimesTenでは、まず所有者はユーザーのログインID(UIDの値)であるとみなされます。TimesTenがユーザーのログインIDを使用して表または索引を検出できない場合は、次に所有者はユーザーSYSであるとみなされます。
別のユーザーとしてアプリケーションでデータ・ストアに接続し、表を共有する必要がある場合は、表の作成時や参照時に所有者を明示的に指定します。
データ・ストアのアクセス制御が有効な場合は、ttUserPrivileges()を使用して表に対するSELECT権限があるかどうかを確認します。表に対するSELECT権限がない場合は、管理者から、GRANT文を使用して権限を付与される必要があります。
一時データ・ストア(DSN属性: Temporary=1)は、データ・ストアとの接続がすべて削除されるまで存続します。一時データ・ストアの表にアクセスしようとしたときに、その表が存在しない場合、その表が存在したデータ・ストアは削除されてしまっている可能性があります。
DSN属性のOverwriteおよびAutoCreateが有効な場合にすでにデータ・ストアが存在していると、TimesTenはそのデータ・ストアを削除して、新しいデータ・ストアを作成します。古いデータ・ストアで作成された表は削除されます。
特定のDSNに接続する場合に、常に同じデータ・ストアにアクセスするようにするには、データ・ストアの相対パス名ではなく、絶対パス名を使用します。たとえば、demoデータ・ストアがdatastoreディレクトリにある場合は、次のように指定します。
DataStore=/datastore/demo
次のようには指定しません。
DataStore=demo
後者の場合、データ・ストアのパス名はアプリケーションが起動されたディレクトリに対する相対パスです。表を検索できず、またデータ・ストアの相対パス名を使用している場合は、その表が存在するデータ・ストアは存在せず、データ・ストア(チェックポイントおよびログ)・ファイルは、アクセスしているディレクトリとは別のディレクトリに存在する可能性があります。
SYS.MONITOR表のTEMP_ALLOCATED_SIZE、TEMP_IN_USE_SIZEおよびTEMP_IN_USE_HIGH_WATERの値を確認して、十分な一時領域があることを確認します。
SELECT TEMP_ALLOCATED_SIZE, TEMP_IN_USE_SIZE,
TEMP_IN_USE_HIGH_WATER
FROM SYS.MONITOR;
注意: | ttIsql dssizeコマンドを使用して、一時データ・パーティションの割当てサイズ、使用中のサイズおよび最高水位標サイズをリストすることもできます。 |
さらに一時領域が必要な場合は、DSNのTempSize属性を再設定します。
また、表の行にアクセスすると、ロックが取得され、一定期間保持されます。トランザクションを短くして、データ・ストアに十分な一時領域が確実にあるようにすることで、ロックによって残りのすべての一時領域が占有されることを回避します。トランザクションによって大量の行ロックが取得される場合は、表ロックを使用することもできます。